summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2022-12-03 20:10:06 +0100
committerGitHub <noreply@github.com>2022-12-03 20:10:06 +0100
commit75e16547f8977e8b2b07723b04bcc3cbe999d566 (patch)
tree7a7795d68f636d1a3f4972c3ea36c1d50db564c5
parentMerge pull request #9289 from liamwhite/fruit-company (diff)
parentCMake: Consolidate common PCH headers (diff)
downloadyuzu-75e16547f8977e8b2b07723b04bcc3cbe999d566.tar
yuzu-75e16547f8977e8b2b07723b04bcc3cbe999d566.tar.gz
yuzu-75e16547f8977e8b2b07723b04bcc3cbe999d566.tar.bz2
yuzu-75e16547f8977e8b2b07723b04bcc3cbe999d566.tar.lz
yuzu-75e16547f8977e8b2b07723b04bcc3cbe999d566.tar.xz
yuzu-75e16547f8977e8b2b07723b04bcc3cbe999d566.tar.zst
yuzu-75e16547f8977e8b2b07723b04bcc3cbe999d566.zip
-rw-r--r--CMakeLists.txt16
m---------externals/dynarmic0
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/audio_core/CMakeLists.txt5
-rw-r--r--src/audio_core/precompiled_headers.h6
-rw-r--r--src/common/CMakeLists.txt6
-rw-r--r--src/common/common_precompiled_headers.h14
-rw-r--r--src/common/precompiled_headers.h6
-rw-r--r--src/common/string_util.cpp4
-rw-r--r--src/core/CMakeLists.txt5
-rw-r--r--src/core/precompiled_headers.h11
-rw-r--r--src/dedicated_room/CMakeLists.txt5
-rw-r--r--src/dedicated_room/precompiled_headers.h6
-rw-r--r--src/input_common/CMakeLists.txt5
-rw-r--r--src/input_common/precompiled_headers.h6
-rw-r--r--src/network/CMakeLists.txt5
-rw-r--r--src/network/precompiled_headers.h6
-rw-r--r--src/shader_recompiler/CMakeLists.txt5
-rw-r--r--src/shader_recompiler/frontend/ir/value.h1
-rw-r--r--src/shader_recompiler/precompiled_headers.h7
-rw-r--r--src/tests/CMakeLists.txt5
-rw-r--r--src/tests/precompiled_headers.h6
-rw-r--r--src/video_core/CMakeLists.txt5
-rw-r--r--src/video_core/precompiled_headers.h6
-rw-r--r--src/web_service/CMakeLists.txt5
-rw-r--r--src/web_service/precompiled_headers.h6
-rw-r--r--src/yuzu/CMakeLists.txt5
-rw-r--r--src/yuzu/precompiled_headers.h6
-rw-r--r--src/yuzu_cmd/CMakeLists.txt5
-rw-r--r--src/yuzu_cmd/precompiled_headers.h6
30 files changed, 173 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b2fbe8806..cdf63a030 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,6 +43,8 @@ option(YUZU_USE_BUNDLED_OPUS "Compile bundled opus" ON)
option(YUZU_TESTS "Compile tests" ON)
+option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
+
CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile Windows crash dump (Minidump) support" OFF "WIN32" OFF)
option(YUZU_USE_BUNDLED_VCPKG "Use vcpkg for yuzu dependencies" "${MSVC}")
@@ -64,6 +66,20 @@ elseif(NOT "$ENV{VCPKG_TOOLCHAIN_FILE}" STREQUAL "")
include("$ENV{VCPKG_TOOLCHAIN_FILE}")
endif()
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ if (MSVC AND CCACHE)
+ # buildcache does not properly cache PCH files, leading to compilation errors.
+ # See https://github.com/mbitsnbites/buildcache/discussions/230
+ message(WARNING "buildcache does not properly support Precompiled Headers. Disabling PCH")
+ set(YUZU_USE_PRECOMPILED_HEADERS OFF)
+ endif()
+endif()
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ message(STATUS "Using Precompiled Headers.")
+ set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON)
+endif()
+
+
# Default to a Release build
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (NOT IS_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
diff --git a/externals/dynarmic b/externals/dynarmic
-Subproject 07c614f91b0af5335e1f9c0653c2d75e7b5f53b
+Subproject a5b57bb9cd1500a6e0a3c800b35c1984211dff1
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4bd5aa50b..140415474 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -82,8 +82,9 @@ if (MSVC)
/wd4324 # 'struct_name': structure was padded due to __declspec(align())
)
- if (USE_CCACHE)
+ if (USE_CCACHE OR YUZU_USE_PRECOMPILED_HEADERS)
# when caching, we need to use /Z7 to downgrade debug info to use an older but more cachable format
+ # Precompiled headers are deleted if not using /Z7. See https://github.com/nanoant/CMakePCHCompiler/issues/21
add_compile_options(/Z7)
else()
add_compile_options(/Zi)
diff --git a/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt
index 75416c53a..0a9d9ec29 100644
--- a/src/audio_core/CMakeLists.txt
+++ b/src/audio_core/CMakeLists.txt
@@ -31,6 +31,7 @@ add_library(audio_core STATIC
out/audio_out.h
out/audio_out_system.cpp
out/audio_out_system.h
+ precompiled_headers.h
renderer/adsp/adsp.cpp
renderer/adsp/adsp.h
renderer/adsp/audio_renderer.cpp
@@ -233,3 +234,7 @@ if(ENABLE_SDL2)
endif()
target_compile_definitions(audio_core PRIVATE HAVE_SDL2)
endif()
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(audio_core PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/audio_core/precompiled_headers.h b/src/audio_core/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/audio_core/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index b7c15c191..a12edc584 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -37,6 +37,7 @@ add_library(common STATIC
cache_management.cpp
cache_management.h
common_funcs.h
+ common_precompiled_headers.h
common_types.h
concepts.h
div_ceil.h
@@ -95,6 +96,7 @@ add_library(common STATIC
param_package.h
parent_of_member.h
point.h
+ precompiled_headers.h
quaternion.h
reader_writer_queue.h
ring_buffer.h
@@ -183,3 +185,7 @@ else()
target_link_libraries(common PRIVATE
$<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static>)
endif()
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(common PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/common/common_precompiled_headers.h b/src/common/common_precompiled_headers.h
new file mode 100644
index 000000000..be7e5b5f9
--- /dev/null
+++ b/src/common/common_precompiled_headers.h
@@ -0,0 +1,14 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <algorithm>
+#include <array>
+#include <chrono>
+#include <memory>
+
+#include <fmt/format.h>
+
+#include "common/assert.h"
+#include "common/common_types.h"
diff --git a/src/common/precompiled_headers.h b/src/common/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/common/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp
index 7a495bc79..b26db4796 100644
--- a/src/common/string_util.cpp
+++ b/src/common/string_util.cpp
@@ -141,7 +141,7 @@ static std::wstring CPToUTF16(u32 code_page, const std::string& input) {
MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), nullptr, 0);
if (size == 0) {
- return L"";
+ return {};
}
std::wstring output(size, L'\0');
@@ -158,7 +158,7 @@ std::string UTF16ToUTF8(const std::wstring& input) {
const auto size = WideCharToMultiByte(CP_UTF8, 0, input.data(), static_cast<int>(input.size()),
nullptr, 0, nullptr, nullptr);
if (size == 0) {
- return "";
+ return {};
}
std::string output(size, '\0');
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 5629980d9..6530d3c60 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -771,6 +771,7 @@ add_library(core STATIC
memory.h
perf_stats.cpp
perf_stats.h
+ precompiled_headers.h
reporter.cpp
reporter.h
telemetry_session.cpp
@@ -825,3 +826,7 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
)
target_link_libraries(core PRIVATE dynarmic)
endif()
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(core PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/core/precompiled_headers.h b/src/core/precompiled_headers.h
new file mode 100644
index 000000000..30a31001d
--- /dev/null
+++ b/src/core/precompiled_headers.h
@@ -0,0 +1,11 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <boost/container/flat_map.hpp> // used by service.h which is heavily included
+#include <boost/intrusive/rbtree.hpp> // used by k_auto_object.h which is heavily included
+
+#include "common/common_precompiled_headers.h"
+
+#include "core/hle/kernel/k_process.h"
diff --git a/src/dedicated_room/CMakeLists.txt b/src/dedicated_room/CMakeLists.txt
index 2d9731f19..5bbe1d4b5 100644
--- a/src/dedicated_room/CMakeLists.txt
+++ b/src/dedicated_room/CMakeLists.txt
@@ -4,6 +4,7 @@
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
add_executable(yuzu-room
+ precompiled_headers.h
yuzu_room.cpp
yuzu_room.rc
)
@@ -25,3 +26,7 @@ target_link_libraries(yuzu-room PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
if(UNIX AND NOT APPLE)
install(TARGETS yuzu-room)
endif()
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(yuzu-room PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/dedicated_room/precompiled_headers.h b/src/dedicated_room/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/dedicated_room/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/input_common/CMakeLists.txt b/src/input_common/CMakeLists.txt
index 193127d0a..e41da2726 100644
--- a/src/input_common/CMakeLists.txt
+++ b/src/input_common/CMakeLists.txt
@@ -34,6 +34,7 @@ add_library(input_common STATIC
input_poller.h
main.cpp
main.h
+ precompiled_headers.h
)
if (MSVC)
@@ -67,3 +68,7 @@ target_link_libraries(input_common PRIVATE usb)
create_target_directory_groups(input_common)
target_link_libraries(input_common PUBLIC core PRIVATE common Boost::boost)
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(input_common PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/input_common/precompiled_headers.h b/src/input_common/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/input_common/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt
index 6f8ca4b90..c85c308de 100644
--- a/src/network/CMakeLists.txt
+++ b/src/network/CMakeLists.txt
@@ -8,6 +8,7 @@ add_library(network STATIC
network.h
packet.cpp
packet.h
+ precompiled_headers.h
room.cpp
room.h
room_member.cpp
@@ -23,3 +24,7 @@ if (ENABLE_WEB_SERVICE)
target_compile_definitions(network PRIVATE -DENABLE_WEB_SERVICE)
target_link_libraries(network PRIVATE web_service)
endif()
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(network PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/network/precompiled_headers.h b/src/network/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/network/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt
index ef09fe2b9..525b2363c 100644
--- a/src/shader_recompiler/CMakeLists.txt
+++ b/src/shader_recompiler/CMakeLists.txt
@@ -231,6 +231,7 @@ add_library(shader_recompiler STATIC
ir_opt/texture_pass.cpp
ir_opt/verification_pass.cpp
object_pool.h
+ precompiled_headers.h
profile.h
program_header.h
runtime_info.h
@@ -260,3 +261,7 @@ else()
endif()
create_target_directory_groups(shader_recompiler)
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(shader_recompiler PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/shader_recompiler/frontend/ir/value.h b/src/shader_recompiler/frontend/ir/value.h
index e8bbb93a5..8b34356fd 100644
--- a/src/shader_recompiler/frontend/ir/value.h
+++ b/src/shader_recompiler/frontend/ir/value.h
@@ -23,7 +23,6 @@
#include "shader_recompiler/frontend/ir/pred.h"
#include "shader_recompiler/frontend/ir/reg.h"
#include "shader_recompiler/frontend/ir/type.h"
-#include "shader_recompiler/frontend/ir/value.h"
namespace Shader::IR {
diff --git a/src/shader_recompiler/precompiled_headers.h b/src/shader_recompiler/precompiled_headers.h
new file mode 100644
index 000000000..5dd6b7eca
--- /dev/null
+++ b/src/shader_recompiler/precompiled_headers.h
@@ -0,0 +1,7 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
+#include "frontend/maxwell/translate/impl/impl.h"
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 43ad2c7ff..348d1edf4 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -11,6 +11,7 @@ add_executable(tests
common/unique_function.cpp
core/core_timing.cpp
core/internal_network/network.cpp
+ precompiled_headers.h
tests.cpp
video_core/buffer_base.cpp
input_common/calibration_configuration_job.cpp
@@ -22,3 +23,7 @@ target_link_libraries(tests PRIVATE common core input_common)
target_link_libraries(tests PRIVATE ${PLATFORM_LIBRARIES} Catch2::Catch2 Threads::Threads)
add_test(NAME tests COMMAND tests)
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(tests PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/tests/precompiled_headers.h b/src/tests/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/tests/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index b03a30992..97609ded4 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -84,6 +84,7 @@ add_library(video_core STATIC
gpu_thread.h
memory_manager.cpp
memory_manager.h
+ precompiled_headers.h
pte_kind.h
query_cache.h
rasterizer_accelerated.cpp
@@ -300,3 +301,7 @@ endif()
if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
target_link_libraries(video_core PRIVATE dynarmic)
endif()
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(video_core PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/video_core/precompiled_headers.h b/src/video_core/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/video_core/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt
index 3f75d97d1..19534b9e4 100644
--- a/src/web_service/CMakeLists.txt
+++ b/src/web_service/CMakeLists.txt
@@ -4,6 +4,7 @@
add_library(web_service STATIC
announce_room_json.cpp
announce_room_json.h
+ precompiled_headers.h
telemetry_json.cpp
telemetry_json.h
verify_login.cpp
@@ -17,3 +18,7 @@ add_library(web_service STATIC
create_target_directory_groups(web_service)
target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib cpp-jwt)
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(web_service PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/web_service/precompiled_headers.h b/src/web_service/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/web_service/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt
index 060de0259..656dd79a9 100644
--- a/src/yuzu/CMakeLists.txt
+++ b/src/yuzu/CMakeLists.txt
@@ -186,6 +186,7 @@ add_executable(yuzu
multiplayer/state.cpp
multiplayer/state.h
multiplayer/validation.h
+ precompiled_headers.h
startup_checks.cpp
startup_checks.h
uisettings.cpp
@@ -409,3 +410,7 @@ endif()
if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
target_link_libraries(yuzu PRIVATE dynarmic)
endif()
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(yuzu PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/yuzu/precompiled_headers.h b/src/yuzu/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/yuzu/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"
diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt
index 7d8ca3d8a..daabf608d 100644
--- a/src/yuzu_cmd/CMakeLists.txt
+++ b/src/yuzu_cmd/CMakeLists.txt
@@ -24,6 +24,7 @@ add_executable(yuzu-cmd
emu_window/emu_window_sdl2_gl.h
emu_window/emu_window_sdl2_vk.cpp
emu_window/emu_window_sdl2_vk.h
+ precompiled_headers.h
yuzu.cpp
yuzu.rc
)
@@ -55,3 +56,7 @@ if (MSVC)
include(CopyYuzuSDLDeps)
copy_yuzu_SDL_deps(yuzu-cmd)
endif()
+
+if (YUZU_USE_PRECOMPILED_HEADERS)
+ target_precompile_headers(yuzu-cmd PRIVATE precompiled_headers.h)
+endif()
diff --git a/src/yuzu_cmd/precompiled_headers.h b/src/yuzu_cmd/precompiled_headers.h
new file mode 100644
index 000000000..aabae730b
--- /dev/null
+++ b/src/yuzu_cmd/precompiled_headers.h
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "common/common_precompiled_headers.h"